
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package logicaServer;
import datosServer.*;
//import java.util.*;

//import ve.edu.ucab.server.logica.LogicaServidor;
/**
 *
 * @author mimi
 */

//import Dominio.Reserve;
import ve.edu.ucab.server.logica.LogicaServidor;
//import ve.edu.ucab.server.logica.Conexion;

public class ComunicacionServer implements LogicaServidor
{
    //public static ListaUsuario losUsuarios;


   // public static Usuario elUsuario;
   /* public static ListaPieza piezasCliente;
    public static ListaPieza piezasMaquina;
    public static ListaPieza piezasPote;
*/


    public static void lecturaXML()
    {
        Archivo.leerArchivoXMLUsuarios(ListaUsuario.getInstance());
    }

    public static void guardarXML()
    {
        Archivo.guardarArchivoXMLUsuarios(ListaUsuario.getInstance());
    }
/*
    public static void inicializarPiezas()
    {
        piezasPote = piezasPote.inicializarPiezas();

    }


    public static void generarPiezasAleatoriamente()
    {
        piezasCliente = piezasPote.generarPiezasAleatorias();
        piezasMaquina = piezasPote.generarPiezasAleatorias();
    }

*/
    public static void inicializarEstructuras()
    {
     
   //    piezasPote = new ListaPieza();
      

       //losUsuarios  = new ListaUsuario();
      // losUsuarios = (ListaUsuario) losUsuarios.getMiSet();

        lecturaXML();
      /*    if (losUsuarios  == null)
        {
            losUsuarios  = new ListaUsuario();
            return true;
        }

        return false;*/
    }
/*
    public static void agregarDatosUsuario(Usuario reg)
    {

        losUsuarios.agregarElemento(reg);
        //losUsuarios.imprimirColeccion();
    }
*/


   /*  public static boolean verificarNick(Usuario registro)
    {
        if (losUsuarios != null)
        {

            return losUsuarios.RecorrerLista(registro.getNickname());//lo encontro
        }
        else
        {
            return false;
        }
    }*/
        public static boolean verificarNick(Usuario registro)
        {
            if (ListaUsuario.getInstance() != null)
            {
               if (ListaUsuario.getInstance().RecorrerLista(registro.getNickname())) //lo encontro
                return true;
            }
            
            return false;
        }

      public static boolean verificarCuenta(String nickname,String clave)
     {
        // ListaUsuario losUsuarios = new ListaUsuario();
         Usuario variable, nodoAuxiliar;
         nodoAuxiliar = new Usuario("","","","",0,0,0);

         nodoAuxiliar.setNickname(nickname);
         nodoAuxiliar.setClave(clave);

        variable = ListaUsuario.getInstance().RecorrerListaUsuario(nodoAuxiliar.getNickname());

        if (variable == null)
           return false;
        else
        {
            if ( (variable.getClave().compareTo(nodoAuxiliar.getClave())) != 0 )
                return false;
            else
                return true;
        }
        
     }

      public static String RetornoEnvioJugadaMaquina(String Vsup, String Vinf,String posX, String posY,String ImgA,String ImgB,String ImgI,String ImgD,String ImgSelec)
      {
          String retorno="true:";


          retorno=retorno.concat(Vsup).concat("-").concat(Vinf).concat(":");
          retorno=retorno.concat(posX).concat("-").concat(posY).concat(":");
          retorno=retorno.concat(ImgA).concat("-").concat(ImgB).concat("-").concat(ImgI).concat("-").concat(ImgD);
          retorno=retorno.concat(":").concat(ImgSelec);

          System.out.println("Retorno => "+retorno);

          return retorno;
      }

 public static String RetornoEnvioTomarDelPote (String IDFicha,String Vsup, String Vinf,String ImgA,String ImgB,String ImgI,String ImgD)
      {
          String retorno="true:";


          retorno=retorno.concat(IDFicha).concat("-").concat(Vsup).concat("-").concat(Vinf).concat(":");
          retorno=retorno.concat(ImgA).concat("-").concat(ImgB).concat("-").concat(ImgI).concat("-").concat(ImgD);

          System.out.println("Retorno en tomar del pote=> "+retorno);

          return retorno;
      }

    public String realizarOperacion (String arg)
    {
        String resultado = "false";

        Usuario userAux = new Usuario();
        Partida parNueva = new Partida();
        int dia,mes,año;
        dia = mes = año = 0;

        //LisU = (ListaUsuario)LisU.getMiSet();
       // reserva.setClave(subArg[2]);
        //return realizarReserva(reserva);

        String[] subArg = arg.split(":");

        
        String datos="";

        if (arg.compareTo("salir") == 0)
        {
            guardarXML();
        }
        else
        {
            //losUsuarios=(ListaUsuario)losUsuarios.getMiSet();
            System.out.println("SubArreglo[0]= " + subArg[0]);

            switch(Integer.parseInt(subArg[0]))
            {
                case 1:
                    boolean retorno=false;
                    //List <Usuario> Luser=new ArrayList();
                    System.out.println("\n 1.-Ingreso al sistema\n");
                    System.out.println("El mensaje enviado es " + subArg[1]);
                    System.out.println("El mensaje enviado es " + subArg[2]+"\n");

                  /*  userAux = null;
                    Luser = losUsuarios.getMiSet().toArray();
                    userAux = Luser;
*/
                    System.out.println("\nImpresion coleccion");
                    ListaUsuario.getInstance().imprimirColeccion();
                    userAux = ListaUsuario.getInstance().RecorrerListaUsuario(subArg[1]);
                  
                    if (userAux != null)
                    {
                        System.out.println("nickname = "+userAux.getNickname()
                                        +"\nnombre= "+userAux.getNombre()
                                        +"\napellido= "+userAux.getApellido()
                                        +"\nclave= "+userAux.getClave());

                        retorno = verificarCuenta(subArg[1], subArg[2]);
                        if (retorno)
                        {    //return resultado = "true";

                                datos="true";
                                datos= datos.concat(":");
                                datos=datos.concat(userAux.getNombre());
                                datos=datos.concat(":");
                                datos=datos.concat(userAux.getApellido());
                              //  datos.concat(":");
                               // datos.concat(ID);
                                System.out.println("Datos en switch para el acceso al sistema= "+datos);
                                return datos;
                        }

                    }

                break;

                case 2:
                    userAux = null;   parNueva = null;
                    ListaPieza piezasCliente = new ListaPieza();
                    System.out.println("\n 2.-Crear Partida\n");
                   //System.out.println("El mensaje es " + subArg[1]);
                   //System.out.println("El mensaje es " + subArg[2]);

                    //String fechaInicio ="";

                    //fechaInicio = subArg[2];


                    //String [] crear = fechaInicio.split("/");

                    /*dia = (Integer.parseInt(crear[0]));
                    mes = (Integer.parseInt(crear[1]));
                    año = (Integer.parseInt(crear[2]));*/
                      // crear[1]----- nick

                    userAux=ListaUsuario.getInstance().RecorrerListaUsuario("mimia");
                    System.out.println("Crear Partida 2");
                     //public Partida(Usuario user)
                    parNueva = new Partida(userAux);
                    System.out.println("Crear Partida 3");
                    //userAux.getPartida().setFechaInicio(dia,mes,año);
                   piezasCliente= piezasCliente.generarPiezasAleatorias();
                    //userAux.setPiezasUsuario();
                    System.out.println("Crear Partida 4");


                    //String[] subArgFecha = fechaNac.split("/");



                System.out.println("Lista de piezas del jugador...");  piezasCliente.imprimirColeccion();
               // System.out.println("Lista de piezas de la maquina...");  piezasMaquina.imprimirColeccion();
                //System.out.println("Lista de piezas en el pote...");  piezasPote.imprimirColeccion();

                resultado ="true";
    //                resultado = "mensaje de despedida recibido";
                break;

                case 3:
                    System.out.println("\n 3.-Registro en el sistema\n");
                    System.out.println("El mensaje enviado es (nick) " + subArg[1]);
                    System.out.println("El mensaje enviado es (clave) " + subArg[2]);
                    System.out.println("El mensaje enviado es (nombre) " + subArg[3]);
                    System.out.println("El mensaje enviado es (apellido) " + subArg[4]);
                    System.out.println("El mensaje enviado es (fechaNacimiento) " + subArg[5]);
                   // System.out.println("El mensaje enviado es " + subArg[6]);

                    boolean valor;  int i=0;
                    String fechaNac ="";
                    fechaNac = subArg[5];
                    

                    String[] subArgFecha = fechaNac.split("/");
                    dia = (Integer.parseInt(subArgFecha[0]));
                    mes = (Integer.parseInt(subArgFecha[1]));
                    año = (Integer.parseInt(subArgFecha[2]));

                    System.out.println("dia "+dia+" mes "+mes+" año "+año);

                    userAux = new Usuario(subArg[1],subArg[2],subArg[3],subArg[4],dia,mes,año/*,subArg[6]*/);

                    valor = verificarNick(userAux);//retorno true = lo encontro

                    if (valor == false)
                    {
                        ListaUsuario.getInstance().agregarElemento(userAux);
                       return resultado = "true";
                    }
                    else
                    {
                        System.out.println("El elemento esta repetido...");
                       // return resultado = "false";
                    }

                   // resultado = "mensaje de despedida recibido";
                break;

                 case 4:
                    System.out.println("\n 4.-Guardar Partida \n");
                    System.out.println("nickname en guardar partida " + subArg[1]);

                    /*Guardar sin cambio alguno*/



                    resultado = "mensaje de despedida recibido";
                break;

                 case 5:
                    System.out.println("\n 5.-Enviar Jugada\n");
                    System.out.println("nickname en enviar jugada " + subArg[1]);
                    System.out.println("ficha jugada " + subArg[2]);
                    System.out.println("posicion de la ficha " + subArg[3]);
                    System.out.println("imagen seleccionada " + subArg[4]);

                    String ficha = subArg[2];
                    String posF = subArg[3];
                    String [] arreglo = ficha.split("-");
                    String [] arregloPos = posF.split("-");

                    resultado = RetornoEnvioJugadaMaquina("3","6","p3","p6","ImagA","ImagB","ImagI","ImagD","ImagSelc");

                    if (resultado.compareTo("")!=0)
                        return resultado;

                    //resultado = "mensaje de despedida recibido";
                break;

                 case 6:
                    System.out.println("\n 6.-Fin de la Partida\n");
                    System.out.println("El mensaje de despedida es " + subArg[1]);
                    resultado = "mensaje de despedida recibido";
                break;

                 case 7:
                    System.out.println("\n 7.-Tomar del Pote\n");
                    System.out.println("nickname del jugador: " + subArg[1]);

                    resultado="";
                    resultado=RetornoEnvioTomarDelPote (String.valueOf(15),String.valueOf(3), String.valueOf(5),"ImgA","ImgB","ImgI","ImgD");
  /*                  Mensaje -> 7:nickname
Retorno -> TRUE:ID1-X1-Y1-imagenArriba1-imagenAbajo1-imagenIzquierda1-imagenDerecha1 o FALSE
*/
                    if (resultado.compareTo("")!=0)
                        return resultado;
                    //resultado = "mensaje de despedida recibido";
                break;
            }

        }
       return resultado;
    }
}